INGE KONGE - Git Repo
Mirrored from https://codeberg.org/kraven/g2_rnode_firmware.git synced 7d ago
>G2 RNode – Station G2 firmware and tools
This repository adds Station G2 support and power/display/serial hardening on top of the RNode Firmware Community Edition tree under T383838RNode_Firmware_CE_G2/. Use it with Reticulum over USB serial, TCP (WiFi on G2), or BLE.
Quick start
1. Install RNS and bleak (for BLE):
T282828
pipx install rns
pipx inject rns bleak
2. Patch the host Reticulum install — see Host-side patches. At minimum, from the repo root:
T282828
python3 patch_rns_rnode_tcp.py
Re-run after T383838pipx upgrade rns.
3. Configure T383838~/.reticulum/config with an T383838[[RNode Interface]]:
Serial: T383838port = /dev/ttyACM0 (adjust for your system).
TCP (G2 WiFi): T383838port = tcp://192.168.x.x:7633.
BLE: serial port for initial setup plus T383838ble_name or T383838ble_addr per the RNS manual. Pair the G2 with the host first.
Example serial block:
T282828
[[RNode Interface]]
type = RNodeInterface
port = /dev/ttyACM0
frequency = 917000000
bandwidth = 125000
txpower = 35
spreading_factor = 9
coding_rate = 6
4. Start T383838rnsd and confirm the interface with T383838rnstatus.
Host-side patches (two scripts)
These are separate: one adjusts Reticulum’s RNode interface for runtime (TCP/BLE/TX power); the other adjusts T383838rnodeconf so it knows Station G2 product/model IDs for provisioning and updates.
┌──────────────────┬─────┬─────────────────────────────────────────────────────────────────────────┐
│ │ `!`BT383838`Fdddpa`f`b`!… │ `!`BT383838`FdddRNode_Firmware_CE_G2/patch_rnodeconf_g2.py`f`b`! │
├──────────────────┼─────┼─────────────────────────────────────────────────────────────────────────┤
│ Location │ Re… │ T383838RNode_Firmware_CE_G2/ subdirectory │
│ Target file │ T383838RN… │ T383838RNS/Utilities/rnodeconf.py (resolved via T383838import RNS.Utilities.rnodecon… │
│ Purpose │ St… │ Adds PRODUCTSTATIONG2 (0x60), MODEL_62 (0x62), and firmware zip mappin… │
│ Interpreter │ Sa… │ Same: Python that can T383838import RNS (pipx venv, T383838venv, or T383838pip install --us… │
│ Discovery │ Lo… │ Uses whatever T383838rnodeconf module your chosen Python loads. Writes T383838rnodec… │
│ When you need it │ Al… │ Only when using T383838rnodeconf with a Station G2 (install, autoinstall, T383838-r … │
└──────────────────┴─────┴─────────────────────────────────────────────────────────────────────────┘
Run examples (from repository root):
T282828
T8b949e# RNodeInterface — use the SAME interpreter as rnsd (pipx, venv, or system pip)
python3 patch_rns_rnode_tcp.py
T8b949e# examples if `python3` is not the right one:
T8b949e# ~/.local/share/pipx/venvs/rns/bin/python patch_rns_rnode_tcp.py
T8b949e# /path/to/project/.venv/bin/python patch_rns_rnode_tcp.py
T8b949e# rnodeconf — same rule: Python that can `import RNS`
~/.local/share/pipx/venvs/rns/bin/python RNode_Firmware_CE_G2/patch_rnodeconf_g2.py
pip / T383838venv vs pipx: Both patches work with a normal T383838pip install rns as long as you run them with that environment’s T383838python (e.g. T383838.venv/bin/python). If you use pipx, T383838python3 on your PATH is often not the pipx app; use T383838~/.local/share/pipx/venvs/rns/bin/python or whichever venv runs T383838rnsd. If import-based discovery fails and you only use pipx, the script still tries the default pipx tree under T383838~/.local/share/pipx/venvs/rns.
If your pipx home differs, run T383838pipx environment or locate T383838venvs/rns on your system.
T383838patch_rns_rnode_tcp.py — what it changes (nine edits):
┌─────┬────────────────────────────────────────────────────────────────────────────────────────────┐
│ # │ Topic │
├─────┼────────────────────────────────────────────────────────────────────────────────────────────┤
│ 1 │ TX power 0–37 dBm for serial, TCP, and BLE. │
│ 2–3 │ Lenient bandwidth / TX / SF / radio-state validation when parameters are slow to arrive o… │
│ 4 │ Up to 5 s poll before validation on TCP/BLE. │
│ 5 │ T383838updateBitrate safe when reported params are missing (avoids bad math / zero division). │
│ 6 │ 5 s read timeout for TCP/BLE instead of 100 ms. │
│ 7–9 │ BLE: clear T383838device_disappeared on connect; keep connection job alive on scan errors; clear… │
└─────┴────────────────────────────────────────────────────────────────────────────────────────────┘
Restart T383838rnsd after applying the RNodeInterface patch. Logs: T383838~/.reticulum/logfile.
T383838patch_rnodeconf_g2.py — caveat: It inserts known strings into upstream T383838rnodeconf.py. A future rns release may change those strings; if the patch fails, compare with STATION_G2_RNODECONF_CHANGES.md and apply by hand.
Firmware changes in this fork
These edits live in T383838RNode_Firmware_CE_G2/ (unless noted).
┌───────────────────────────┬──────────────────────────────────────────────────────────────────────┐
│ Area │ Change │
├───────────────────────────┼──────────────────────────────────────────────────────────────────────┤
│ Heltec WiFi LoRa 32 V3/V4 │ Lower OLED update rate when active; when blanked, refresh at ~2 s i… │
│ Heltec V3/V4 CPU / serial │ After T383838validate_status(), idle CPU set to 160 MHz with T383838Serial.update… │
│ Heltec V3 │ Skip T383838while (!Serial) wait on boot (USB CDC). T383838sleep_now() turns off … │
│ Power (T383838Power.h) │ PMU / battery path polled on a ~2 s interval to cut I²C traffic. │
│ WiFi (T383838Remote.h) │ After STA starts, T383838WiFi.setSleep(WIFI_PS_MAX_MODEM) for lighter WiFi… │
│ BLE (T383838BLESerial.cpp) │ T383838ESP_BLE_SEC_NONE guarded for Arduino-ESP32 2.0.x compatibility. │
│ Build │ T383838Makefile uses T383838python3 and names artifacts from T383838RNode_Firmware_CE_G2… │
└───────────────────────────┴──────────────────────────────────────────────────────────────────────┘
Display blanking: While USB serial is in use, the host often sends T383838CMD_RADIO_STATE, which calls T383838display_unblank(), so the OLED may stay on until you unplug USB or stop processes using the port. To force-disable blanking, use KISS T383838CMD_DISP_BLNK (0x64) with payload T3838380, or clear the EEPROM blanking config per upstream RNode docs.
T383838rnodeconf “Device signature validation failed”: Expected for many locally built images; it is a trust warning, not proof that flashing failed. Official verifiability uses upstream signing and binaries; T383838Firmware hash set is separate from signature checks.
What’s in this repo
┌────────────────────────────────────────┬─────────────────────────────────────────────────────────┐
│ Item │ Description │
├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ RNodeFirmwareCE_G2/ │ CE firmware including Station G2; build targets below. │
│ patchrnsrnode_tcp.py (root) │ Patches installed T383838RNodeInterface.py — see Host-side — e.g. T383838rnodeconf /dev/ttyACM0 -r --product 60 --model 62 --hwrev 1 for ROM bootstrap.
Upstream CE readme and console docs live under T383838RNode_Firmware_CE_G2/README.md and T383838RNode_Firmware_CE_G2/Documentation/.
Documentation
References
• RNode
• RNode Firmware for Station G2.md (repo) – Long-form G2 platform notes and roadmap context.
Served by rngit 1.3.9 - Generated in 0.03s